package net.vmiranda.traindroid.scrappers;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import net.vmiranda.traindroid.beans.buses.PasadaDeAutobus;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class EMTScrapper extends GenericScrapper {
	

	public static final String BASE_URL = "http://www.emtmadrid.es/aplicaciones/Estimaciones.aspx";
	public static final String PARAM_PARADA = "idStop";
	public static final String ESTIMACIONES_KEY ="ctl00_ContentPlaceHolder1_repeaterEstimaciones_ctl00_ctl00_Estimaciones1_pnlTabla";
	
	
	public EMTScrapper(){
		
	}

	
	
	private URL buildURL(int parada){
		try {
			StringBuffer paradaUrl = new StringBuffer(BASE_URL).append("?").append(PARAM_PARADA).append("=").append(parada);
			return new URL(paradaUrl.toString());
		} catch (MalformedURLException e) {
			throw new IllegalStateException();
		}		
		
	}
	
	public List<PasadaDeAutobus> getParadasAutobus(int idParada){
		
		
		List<PasadaDeAutobus> pasadas = new ArrayList<PasadaDeAutobus>();
		URL url = buildURL(idParada);
		try {
			Document document = Jsoup.parse(url, 3000);
			List<Element> pasadasRaw = document.getElementById(ESTIMACIONES_KEY).getElementsByTag("tr");
			pasadas = procesarPasadas(pasadasRaw);
		} catch (IOException e) {
			throw new IllegalStateException("");
		}		
		
		
		return pasadas;
		
	}



	private List<PasadaDeAutobus> procesarPasadas(List<Element> pasadasRaw) {
		List<PasadaDeAutobus> pasadas = new ArrayList<PasadaDeAutobus>();
		for(Element e : pasadasRaw){
			try{
			String salida = e.getElementsByTag("td").get(0).text();
			String linea = e.getElementsByTag("td").get(1).text();
			String parada = e.getElementsByTag("td").get(2).text();
			PasadaDeAutobus pasada = new PasadaDeAutobus();
			pasada.setHora(salida);
			pasada.setLinea(linea);
			pasada.setParada(parada);
			pasadas.add(pasada);
			}catch(Exception ex){
				
			}
			
		}
		
		return pasadas;
	}
	
	
	
	
	

	
	
	
	
}
